FIR filter for 36 samples and 36 coefficients
FIR filter example code 0 with dummy instruction. NOT works!
addi $a1, $t0, 35; 《 pipe 1 runs
addi $a3, $t0, 36; 《 pipe 2 runs, $a3 = n
for1:
lw $t2, 216($a0); 《 pipe 1 runs, $t2 = x(k), $a0 = k
lw $t4, 180($a1); 《 pipe 2 runs, $t4 = h(n-k), $a1 = n-k
addi $a0, $a0, 1; 《 pipe 1 runs
addi $a1, $a1, -1; 《 pipe 2 runs
addi $a2, $a2, 1; 《 pipe 1 runs (dummy instruction)
mult $t2, $t4; 《 pipe 2 runs waiting data from load instruction.
mflo $t6; 《 pipe 1 runs, not works because pipe 2 still waiting data, nothing or wrong data will be moved!
add $t7, $t7, $t6; 《 pipe 2 runs
bne $a3, $a2, for1; 《 pipe 1 runs
sw $t7, 258($t8); 《pipe 2 runs, $t7 = y(n)
FIR filter example code 1 with dummy instruction. Works!
addi $a1, $t0, 35; 《 pipe 1 runs
addi $a3, $t0, 36; 《 pipe 2 runs
for1:
lw $t2, 216($a0); 《 pipe 1 runs
lw $t4, 180($a1); 《 pipe 2 runs
addi $a0, $a0, 1; 《 pipe 1 runs
addi $a1, $a1, -1; 《 pipe 2 runs
mult $t2, $t4; 《 pipe 1 runs waiting data from load instruction.
mflo $t6; 《 pipe 2 runs, works because pipe 1 has already executed the mult instruction.
addi $a2, $a2, 1; 《 pipe 1 runs (dummy instruction)
add $t7, $t7, $t6; 《 pipe 2 runs
bne $a3, $a2, for1; 《 pipe 1 runs
sw $t7, 258($t8); 《 pipe 2 runs
FIR filter example code 2 without dummy instruction. Faster and works!
addi $a1, $t0, 35; 《 pipe 1 runs
addi $a3, $t0, 36; 《 pipe 2 runs
for1:
lw $t2, 216($a0); 《 pipe 1 and 2 runs alternately at each iteration.
lw $t4, 180($a1); 《 pipe 1 and 2 runs alternately at each iteration.
addi $a0, $a0, 1; 《 pipe 1 and 2 runs alternately at each iteration.
addi $a1, $a1, -1; 《 pipe 1 and 2 runs alternately at each iteration.
mult $t2, $t4; 《 pipe 1 and 2 runs alternately at each iteration. Waiting data from load instruction.
mflo $t6; 《 pipe 1 and 2 runs alternately at each iteration, works because pipe 1 or 2 has already executed the mult instruction.
add $t7, $t7, $t6; 《 pipe 1 and 2 runs alternately at each iteration.
bne $a3, $a0, for1; 《 pipe 1 and 2 runs alternately at each iteration.
sw $t7, 258($t8); 《 pipe 1 or 2 runs, depend on number of coefficients (iterations)